home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: Alpha / Whiteline Alpha.iso / progtool / modula2 / pl0 / pl0.mod next >
Encoding:
Text File  |  1994-09-22  |  1.9 KB  |  98 lines

  1.  
  2.  
  3. MODULE PL0;
  4.  
  5. FROM Terminal IMPORT Read;
  6.  
  7. FROM FileSystem IMPORT Lookup, Response, Close;
  8.  
  9. FROM TextWindows IMPORT Window, OpenTextWindow, Write, WriteLn, 
  10.                         WriteString, CloseTextWindow;
  11.                         
  12. FROM Windows IMPORT WindowElements, Title;
  13.  
  14. FROM PL0Scanner IMPORT InitScanner, source, CloseScanner;
  15.  
  16. FROM PL0Parser IMPORT Parse, noerr, EndParser;
  17.  
  18. FROM PL0Generator IMPORT InitGenerator, EndGenerator;
  19.  
  20. FROM PL0Interpreter IMPORT Interpret, EndInterpreter;
  21.  
  22.  
  23. CONST 
  24.   FLength = 13;
  25.   ESC = 33C;
  26.   DEL = 177C;
  27.    
  28.  
  29. VAR
  30.   ch : CHAR;
  31.   win : Window;
  32.   FileName : ARRAY [0..FLength] OF CHAR;
  33.   
  34.  
  35. PROCEDURE ReadName;
  36. VAR
  37.   i : CARDINAL;
  38.   
  39. BEGIN
  40.   Read(ch);
  41.   FileName := "";
  42.   i := 0;
  43.   WHILE (CAP(ch)>="A") AND (CAP(ch)<="Z") OR
  44.         (ch>="0") AND (ch<="9") OR
  45.         (ch=".") OR (ch=DEL) DO
  46.     IF ch=DEL THEN
  47.        IF i>3 THEN Write(win,DEL);
  48.           DEC(i);
  49.        END;
  50.     ELSIF i<FLength THEN
  51.        Write(win,ch);
  52.        FileName[i] := ch;
  53.        INC(i);
  54.     END;
  55.     Read(ch);
  56.   END;
  57.   IF (3<i) AND (i<FLength) AND (FileName[i-1]=".") THEN
  58.      FileName[i] := "P"; INC(i);
  59.      FileName[i] := "L"; INC(i);
  60.      FileName[i] := "0"; INC(i);
  61.      WriteString(win,"PL0");
  62.   END;
  63.   FileName[i] := CHAR(0);
  64. END ReadName;
  65.  
  66.  
  67. BEGIN
  68.   OpenTextWindow(win,WindowElements{Title},0,320,640,80,"DIALOG");
  69.   LOOP
  70.     WriteString(win,"in> ");
  71.     ReadName;
  72.     IF ch=ESC THEN EXIT; END;
  73.     Lookup(source,FileName,FALSE);
  74.     IF source.res = done THEN
  75.        InitScanner;
  76.        InitGenerator;
  77.        Parse;
  78.        Close(source);
  79.        IF noerr THEN
  80.           WriteString(win," interpreting");
  81.           Interpret;
  82.        ELSE
  83.           WriteString(win," incorrect");
  84.        END;
  85.     ELSE
  86.        WriteString(win, "not found");
  87.     END;
  88.     WriteLn(win);
  89.   END;
  90.   CloseScanner;
  91.   EndParser;
  92.   EndGenerator;
  93.   EndInterpreter;
  94.   CloseTextWindow(win);
  95. END PL0.
  96.  
  97.    
  98.